#include <iostream>
#include <thread>
#include <mutex>

using std::cout;
using std::endl;
using std::thread;
using std::mutex;
using std::unique_lock;

int gCnt = 0;
mutex mtx;//创建全局唯一的一把锁

void threadFunc()
{
    for(size_t idx = 0; idx != 10000000; ++idx)
    {
        //unique_lock的实现采用了RAII的思想，在构造函数中上锁，在析构函数
        //中解锁，利用栈对象的生命周期管理锁资源,当栈对象离开作用域的时候
        //会自动解锁,还可以提供手动上锁与解锁的操作，就更加灵活
        unique_lock<mutex> ul(mtx);
        ++gCnt;
        ul.unlock();

        //...xxx,不加锁
        ul.lock();
        //...yyy,锁住
        ul.unlock();
    }
}

int main(int argc, char *argv[])
{
    thread th(threadFunc);
    thread th2(threadFunc);

    th.join();
    th2.join();

    cout << "gCnt = " << gCnt << endl;

    return 0;
}

